/* 
 * File:   FireBall.cpp
 * Author: mauro
 * 
 * Created on 24 de noviembre de 2014, 19:47
 */

#include "FireBall.h"

FireBall::FireBall(ObjFactory *objFactory, float posX, float posY, int dire) {
    this->contacBullet = false;
    this->contacFloor = false;
    //     this->inWorld = false; //eliminar
    int scale = 20;
    int mass = 0.5;
    int idImage = 2;
    int distAlPersonaje = 1.2f;
    float inpulseX = 3.5f;
    float inpulseY = 0.0f;
    //Es necesario que la pelota se cree fuera del personaje.
    float x = 0;

    //datos para setear un impulso. Izquierda o derecha 
    b2Vec2 inpulse(0.0f, 0.0f);
    if (dire == SHOOTLEFT) {
        inpulse.Set(-inpulseX, inpulseY);
        x = posX - distAlPersonaje;
    } else if (dire == SHOOTRIGHT) {
        inpulse.Set(inpulseX, inpulseY);
        x = posX + distAlPersonaje;
    }
    //#NOTA: falta agregar el tipo de imagen (id)    
    Circle *circle = new Circle(objFactory, false, x * 100, posY * 100, scale, mass, idImage);
    this->circle = circle;
    //seteo id objeto
    this->circle->setObjectId(BULLET);

    b2Body * body = circle->getObject()->getBody();
    //se aplica al centro del circulo
    b2Vec2 pos(body->GetWorldCenter().x, body->GetWorldCenter().y);
    body->ApplyLinearImpulse(inpulse, pos, true);
    // Bullet = true, caracteristica necesaria para una bala.
    body->SetBullet(true);
    //#NOTA: La gravedad no afecta. Creo que no es necesario
    body->SetGravityScale(0.0f);

    //seteo USERDATA para el contacto con los otros elemento del mundo de box2d    
    b2Fixture* fixtt = body->GetFixtureList();
    fixtt->SetUserData((void*) IS_FIRE);
}

FireBall::~FireBall() {
}

